var CreatedOKLodop7766 = null;

interface ILodopFuncs{
    needCLodop:()=>void;
    getRoute:(url:any)=>void;
    getLodop:(oOBJECT:any,oEMBED:any)=>boolean;
    LODOP?:any;
}

class LodopFuncsService implements ILodopFuncs{
        constructor(private $ngBootbox: BootboxService) {
    }

    //====判断是否需要安装CLodop云打印服务器:====
            needCLodop(){
                try{
                    var ua=navigator.userAgent;
                    if (ua.match(/Windows\sPhone/i) !=null) return true;
                    if (ua.match(/iPhone|iPod/i) != null) return true;
                    if (ua.match(/Android/i) != null) return true;
                    if (ua.match(/Edge\D?\d+/i) != null) return true;
                    if (ua.match(/QQBrowser/i) != null) return false;
                    var verTrident:any=ua.match(/Trident\D?\d+/i);
                    var verIE:any=ua.match(/MSIE\D?\d+/i);
                    var verOPR:any=ua.match(/OPR\D?\d+/i);
                    var verFF:any=ua.match(/Firefox\D?\d+/i);
                    var x64:any=ua.match(/x64/i);
                    if ((verTrident==null)&&(verIE==null)&&(x64!==null)) 
                        return true; else
                    if ( verFF !== null) {
                        verFF = verFF[0].match(/\d+/);
                        if ( verFF[0] >= 42 ) return true;
                    } else 
                    if ( verOPR !== null) {
                        verOPR = verOPR[0].match(/\d+/);
                        if ( verOPR[0] >= 32 ) return true;
                    } else 
                    if ((verTrident==null)&&(verIE==null)) {
                        var verChrome:any=ua.match(/Chrome\D?\d+/i);		
                        if ( verChrome !== null ) {
                            verChrome = verChrome[0].match(/\d+/);
                            if (verChrome[0] >=42) return true;
                        };
                    };
                        return false;
                    } catch(err) {return true;};
            };

             getRoute(url){
                if(!this.needCLodop()){
                    return;
                }
                var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
                var oscript = document.createElement("script");
                //让本机浏览器打印(更优先)：
                oscript = document.createElement("script");
                oscript.src = url;
                head.insertBefore(oscript, head.firstChild);
                //本机浏览器的后补端口8001：
                oscript = document.createElement("script");
                oscript.src = url;
                head.insertBefore(oscript, head.firstChild);
            };

            //====获取LODOP对象的主过程：====
            getLodop(oOBJECT, oEMBED){
                var strHtmInstall="打印控件未安装!点击确定下载,下载安装后请刷新页面或重新进入。";
                var strHtmUpdate="打印控件需要升级!点击确定下载,升级后请重新进入";
                var strHtm64_Install="打印控件未安装!点击确定下载，执行安装,安装后请刷新页面或重新进入";
                var strHtm64_Update="打印控件需要升级!点击确定下载, 执行升级,升级后请重新进入。";
                var strHtmFireFox="（注意：如曾安装过Lodop旧版附件npActiveXPLugin,请在【工具】->【附加组件】->【扩展】中先卸它）";
                var strHtmChrome="(如果此前正常，仅因浏览器升级或重安装而出问题，需重新执行以上安装）";
                var strCLodopInstall="CLodop云打印服务(localhost本地)未安装启动!点击确定执行下载，执行下载安装后请刷新页面。";
                var strCLodopUpdate="CLodop云打印服务需升级!升级后请刷新页面。";
                var LODOP;
                try{
                    var isIE = (navigator.userAgent.indexOf('MSIE')>=0) || (navigator.userAgent.indexOf('Trident')>=0);
                    if (this.needCLodop()) {
                        try{ LODOP=getCLodop();} catch(err) {};
                    if (!LODOP && document.readyState!=="complete") {alert("C-Lodop没准备好，请稍后再试！"); return;};
                    if (!LODOP) {
                        if (isIE) $ngBootbox.confirm(strCLodopInstall).then(function () {
                            var is64IE = isIE && (navigator.userAgent.indexOf('x64') >= 0);
                            is64IE ? window.location.href = "http://113.10.155.131/download/CLodop_Setup_for_Win64NT_2.062.zip" : window.location.href = "http://113.10.155.131/download/CLodopPrint_Setup_for_Win32NT_2.062.zip";
                            
                        }); else
                            $ngBootbox.confirm(strCLodopInstall).then(function () {
                                is64IE ? window.location.href = "http://113.10.155.131/download/CLodop_Setup_for_Win64NT_2.062.zip" : window.location.href = "http://113.10.155.131/download/CLodopPrint_Setup_for_Win32NT_2.062.zip";
                            })
                            return;
                        } else {

                        if (CLODOP.CVERSION<"2.0.6.2") {   
                        if (isIE) document.write(strCLodopUpdate); else
                            $ngBootbox.alert(strCLodopInstall);
                    };
                    if (oEMBED && oEMBED.parentNode) oEMBED.parentNode.removeChild(oEMBED);
                    if (oOBJECT && oOBJECT.parentNode) oOBJECT.parentNode.removeChild(oOBJECT);	
                    };
                    } else {
                        var is64IE  = isIE && (navigator.userAgent.indexOf('x64')>=0);
                        //=====如果页面有Lodop就直接使用，没有则新建:==========
                        if (oOBJECT!=undefined || oEMBED!=undefined) {
                            if (isIE) LODOP=oOBJECT; else  LODOP=oEMBED;
                        } else if (CreatedOKLodop7766==null){
                            LODOP=document.createElement("object");
                            LODOP.setAttribute("width",0);
                            LODOP.setAttribute("height",0);
                            LODOP.setAttribute("style","position:absolute;left:0px;top:-100px;width:0px;height:0px;");
                            if (isIE) LODOP.setAttribute("classid","clsid:2105C259-1E0C-4534-8141-A753534CB4CA");
                            else LODOP.setAttribute("type","application/x-print-lodop");
                            document.documentElement.appendChild(LODOP);
                            CreatedOKLodop7766=LODOP;
                        } else LODOP=CreatedOKLodop7766;
                        //=====Lodop插件未安装时提示下载地址:==========
                        if ((LODOP==null)||(typeof(LODOP.VERSION)=="undefined")) {
                            if (navigator.userAgent.indexOf('Chrome') >= 0)
                                $ngBootbox.alert(strHtmChrome);
                            if (navigator.userAgent.indexOf('Firefox') >= 0)
                                $ngBootbox.alert(strHtmFireFox);
                            if (is64IE) {
                                $ngBootbox.confirm(strHtm64_Install).then(function () {
                                    window.location.href = "http://113.10.155.131/download/CLodop_Setup_for_Win64NT_2.062.zip";
                                });
                            }else
                            if (isIE)   document.write(strHtmInstall);    else
                                $ngBootbox.confirm(strHtmInstall).then(function () {
                                    window.location.href = "http://113.10.155.131/download/CLodopPrint_Setup_for_Win32NT_2.062.zip";
                            })
                            return LODOP;
                        };
                    };
                    if (LODOP.VERSION<"6.2.0.3") {
                        if (this.needCLodop())
                        document.documentElement.innerHTML=strCLodopUpdate+document.documentElement.innerHTML; else
                        if (is64IE){
                            $ngBootbox.confirm(strHtm64_Update).then(function () {
                                window.location.href = "http://113.10.155.131/download/CLodop_Setup_for_Win64NT_2.062.zip";
                            })
                        }  else
                        if (isIE) document.write(strHtmUpdate); else
                            $ngBootbox.confirm(strHtmUpdate).then(function () {
                                window.location.href = "http://113.10.155.131/download/CLodopPrint_Setup_for_Win32NT_2.062.zip";
                            })
                        return LODOP;
                    };
                    //===如下空白位置适合调用统一功能(如注册语句、语言选择等):===
                    LODOP.SET_LICENSES("","13528A153BAEE3A0254B9507DCDE2839","","");
                    //===========================================================
                    return LODOP;
                } catch(err) {alert("getLodop出错:"+err);};
            }

}

angular.module("LodopFuncsService",[]).service('LodopFuncsService',[LodopFuncsService]);


